package cl.gob.minvu.catastromobile;

import com.google.gson.Gson;

import cl.gob.minvu.catastromobile.entities.SituacionVivienda;
import cl.gob.minvu.catastromobile.util.GenericUtil;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;

/**
 * @author psep
 * 
 */
public class SituacionActivity extends AbstractActivity {

	private Spinner intervencion;
	private Spinner tipoDanio;
	private Spinner visitaIngEstructural;
	private TextView glosaTipoDanio;
	private SituacionVivienda situacionTO;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_situacion);
		super.session = super.getSharedPreferences(GenericUtil.SESSION,
				MODE_PRIVATE);
		this.intervencion = (Spinner) super
				.findViewById(R.id.spinnerSitIntervencion);
		this.tipoDanio = (Spinner) super.findViewById(R.id.spinnerSitTipoDanio);
		this.visitaIngEstructural = (Spinner) super
				.findViewById(R.id.spinnerSitVisitaIng);
		this.glosaTipoDanio = (TextView) super
				.findViewById(R.id.lblSitDescGlosa);
		this.onLoadSession();
		this.onchangeDanio();
	}

	/**
	 * Método que carga el objeto de sesión.
	 */
	private void onLoadSession() {
		String json = super.session.getString(GenericUtil.SITUACION, null);

		if (json != null) {
			Gson gson = new Gson();
			this.situacionTO = gson.fromJson(json, SituacionVivienda.class);
			this.loadTextFrm();
		}
	}

	/**
	 * Método que carga datos desde el objeto hacía el formulario
	 */
	private void loadTextFrm() {
		if (this.situacionTO != null) {
			this.intervencion.setSelection(this.situacionTO.intervencion);
			this.tipoDanio.setSelection(this.situacionTO.tipoDanio);
			this.visitaIngEstructural
					.setSelection(this.situacionTO.visitaIngEstructural);
		}
	}

	/**
	 * Método que registra el evento de onchange del combobox de Tipo de Daños
	 * para el llenado dinámico de la glosa.
	 */
	private void onchangeDanio() {
		this.tipoDanio.setOnItemSelectedListener(new OnItemSelectedListener() {

			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				switch (position) {
				case 1:
					glosaTipoDanio.setText(R.string.tipoDanio_sinDanio);
					break;

				case 2:
					glosaTipoDanio.setText(R.string.tipoDanio_leve);
					break;

				case 3:
					glosaTipoDanio.setText(R.string.tipoDanio_moderado);
					break;

				case 4:
					glosaTipoDanio.setText(R.string.tipoDanio_mayor);
					break;

				case 5:
					glosaTipoDanio.setText(R.string.tipoDanio_irreparable);
					break;

				default:
					glosaTipoDanio.setText("");
					break;
				}

			}

			public void onNothingSelected(AdapterView<?> parent) {
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.situacion, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		
		switch (id) {
		case R.id.situacion_frm_descartar:
			this.reset();
			return true;

		case R.id.situacion_frm_atras:
			super.go(FormActivity.class);
			finish();
			return true;

		default:
			return super.onOptionsItemSelected(item);
		}
	}

	/**
	 * Método que carga los datos del formulario hacía el objeto.
	 */
	private void loadSituacion() {
		this.situacionTO = new SituacionVivienda();
		this.situacionTO.intervencion = super.getIdSpinner(this.intervencion);
		this.situacionTO.tipoDanio = super.getIdSpinner(this.tipoDanio);
		this.situacionTO.visitaIngEstructural = super
				.getIdSpinner(this.visitaIngEstructural);
	}

	/**
	 * @param button
	 */
	public void onClickSgteSituacion(View button) {
		if (this.validateFrm()) {
			this.loadSituacion();
			
			Editor edit = super.session.edit();
			edit.putString(GenericUtil.SITUACION, new Gson().toJson(this.situacionTO));
			edit.commit();
			
			super.go(EvaluacionActivity.class);
			finish();
		}
	}

	@Override
	public void reset() {
		this.situacionTO = null;
		Editor edit = super.session.edit();
		edit.remove(GenericUtil.SITUACION);
		edit.commit();
		this.intervencion.setSelection(0);
		this.tipoDanio.setSelection(0);
		this.visitaIngEstructural.setSelection(0);
		this.glosaTipoDanio.setText("");
	}

	@Override
	public boolean validateFrm() {
		int valida = 0;

		if (super.getIdSpinner(this.tipoDanio) == 0) {
			super.toastMsg("Debe seleccionar el tipo de daño");
			valida = valida + 1;
		}
		if (super.getIdSpinner(this.visitaIngEstructural) == 0) {
			super.toastMsg("Debe seleccionar si se necesita la visita del Ingeniero");
			valida = valida + 1;
		}

		if (valida == 0) {
			return true;
		} else {
			return false;
		}
	}
}
